package com.lb.jwitter.action.util;
import java.util.*;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;

import com.lb.jwitter.service.ConditionReport;
import com.lb.jwitter.service.TblCTDTChuyenNganh;
import com.lb.jwitter.service.TblCTDTChuyenNganhService;
import com.lb.jwitter.service.TblCTDTKhoiNganhMonHoc;
import com.lb.jwitter.service.TblCTDTKhoiNganhMonHocService;
import com.lb.jwitter.service.TblCTDTNhomMHTuChonMonHoc;
import com.lb.jwitter.service.TblCTDTNhomMHTuChonMonHocService;
import com.lb.jwitter.service.TblCTDTNhomMHTuChonService;
import com.lb.jwitter.service.TblDKMHTaiKhoanHocVien;
import com.lb.jwitter.service.TblDKMHTaiKhoanHocVienService;
import com.lb.jwitter.service.TblTaiKhoan;
import com.lb.jwitter.service.TblTaiKhoanService;
import com.lb.jwitter.util.ApplicationContextProvider;
import com.lb.jwitter.util.CTDT;
import com.lb.jwitter.util.Encrypt;
import com.lb.jwitter.util.NhomMonHocTuChon;
import com.lb.jwitter.util.SendMail;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.lb.jwitter.service.TblThongTinHocVienMonHoc;
import com.lb.jwitter.service.TblThongTinHocVienMonHocService;

@ContextConfiguration(locations="classpath:beans.xml")
public class LoginAction
{
	
	private String username;
	
	private String password;
	
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	TblDKMHTaiKhoanHocVienService tblDKMHTaiKhoanHocVienService;
	
	 @Autowired // Injected by Spring when bean is "ready"
	 ApplicationContextProvider contextProvider;

public String execute() throws Exception
{
   	try{
   

       Map session = ActionContext.getContext().getSession();
       if(session.get("taiKhoanHocVien") != null) return Action.SUCCESS;

   	   session.put("taiKhoanHocVien", null);



	    ApplicationContext context = ApplicationContextProvider.getApplicationContext();

		   tblDKMHTaiKhoanHocVienService = (TblDKMHTaiKhoanHocVienService) context.getBean("tbl_DKMH_TaiKhoanHocVienClient");

		   TblCTDTKhoiNganhMonHocService tblCTDTKhoiNganhMonHocService = 
				   (TblCTDTKhoiNganhMonHocService) context.getBean("tbl_CTDT_KhoiNganh_MonHocClient");

		   TblCTDTNhomMHTuChonService tblCTDTNhomMHTuChonService = 
				   (TblCTDTNhomMHTuChonService) context.getBean("tbl_CTDT_NhomMHTuChonClient");

		   TblCTDTNhomMHTuChonMonHocService tblCTDTNhomMHTuChonMonHocService = 
				   (TblCTDTNhomMHTuChonMonHocService) context.getBean("tbl_CTDT_NhomMHTuChon_MonHocClient");
		   
	   	List<ConditionReport> cons = new ArrayList<ConditionReport>(); 
	    if(username!= null && !username.equals("")){ 
	        ConditionReport con = new ConditionReport(); 
	        con.setCol("username");
	        con.setValue1(username);
	        con.setOperator("eq");
	        cons.add(con);	
	    } else 
	    	return "noprivilege";

       List<TblDKMHTaiKhoanHocVien> taiKhoanHocVien = tblDKMHTaiKhoanHocVienService.findtblDKMHTaiKhoanHocVienByCondition(cons, 1, 1);

       if (taiKhoanHocVien == null || taiKhoanHocVien.size() == 0 ) return "noprivilege";
       if (!taiKhoanHocVien.get(0).getPassword().equals(Encrypt.sha(password, "SHA-1")))
    	   return "noprivilege";
       
       
       session.put("taiKhoanHocVien", taiKhoanHocVien.get(0));
       
       
       //get CTDT
       CTDT ctdt = new CTDT();
       //get DS monhocBB
       cons.clear();
       if(taiKhoanHocVien != null && taiKhoanHocVien.size()> 0){ 
    	   try{
	        ConditionReport con = new ConditionReport(); 
	        con.setCol("khoiNganhId.chuyenNganhId.id");
	        con.setValue1(taiKhoanHocVien.get(0).getHocVienId().getChuyenNganhId().getId());
	        con.setOperator("eq");
	        cons.add(con);	
    	   }catch(Exception e){
    		    ConditionReport con = new ConditionReport(); 
	   	        con.setCol("khoiNganhId.chuyenNganhId.id");
	   	        con.setValue1(taiKhoanHocVien.get(0).getHocVienId().getChuyenNganhId());
	   	        con.setOperator("eq");
	   	        cons.add(con);	
    	   }
	   }
       if(taiKhoanHocVien != null  && taiKhoanHocVien.size()> 0){ 
	        ConditionReport con = new ConditionReport(); 
	        con.setCol("khoiNganhId.khoaHoc");
	        con.setValue1(taiKhoanHocVien.get(0).getHocVienId().getKhoaHoc());
	        con.setOperator("eq");
	        cons.add(con);	
	   }
//       if(taiKhoanHocVien != null  && taiKhoanHocVien.size()> 0 &&taiKhoanHocVien.get(0).getHocVienId().getHeDaoTaoId()!=null){ 
//	        ConditionReport con = new ConditionReport(); 
//	        con.setCol("khoiNganhId.heDaoTaoId.id");
//	        con.setValue1(taiKhoanHocVien.get(0).getHocVienId().getHeDaoTaoId().getId());
//	        con.setOperator("eq");
//	        cons.add(con);	
//	   }
       { 
	        ConditionReport con = new ConditionReport(); 
	        con.setCol("hocKy");
	        con.setValue1("asc");
	        con.setOperator("order");
	        cons.add(con);	
	   }
//       { 
//	        ConditionReport con = new ConditionReport(); 
//	        con.setCol("maLoaiBB");
//	        con.setValue1("BB");
//	        con.setOperator("eq");
//	        cons.add(con);	
//	   }
       { 
	        ConditionReport con = new ConditionReport(); 
	        con.setCol("monHocId.ten");
	        con.setValue1("asc");
	        con.setOperator("order");
	        cons.add(con);	
	   }
       
       List<TblCTDTKhoiNganhMonHoc> monHocs = tblCTDTKhoiNganhMonHocService.findtblCTDTKhoiNganhMonHocByCondition(cons, 0, 0);
       ctdt.setMonHocs(monHocs);
       
//       //set nhom mon hoc tu chon
//       cons.clear();
//       if(taiKhoanHocVien != null && taiKhoanHocVien.size()> 0){ 
//	        ConditionReport con = new ConditionReport(); 
//	        con.setCol("nhomMHTCId.khoiNganhId.chuyenNganhId.id");
//	        con.setValue1(taiKhoanHocVien.get(0).getHocVienId().getChuyenNganhId().getId());
//	        con.setOperator("eq");
//	        cons.add(con);	
//	   }
//       if(taiKhoanHocVien != null  && taiKhoanHocVien.size()> 0){ 
//	        ConditionReport con = new ConditionReport(); 
//	        con.setCol("nhomMHTCId.khoiNganhId.khoaHoc");
//	        con.setValue1(taiKhoanHocVien.get(0).getHocVienId().getKhoaHoc());
//	        con.setOperator("eq");
//	        cons.add(con);	
//	   }
//       { 
//	        ConditionReport con = new ConditionReport(); 
//	        con.setCol("nhomMHTCId.id");
//	        con.setValue1("asc");
//	        con.setOperator("order");
//	        cons.add(con);	
//	   }
//
//       List<TblCTDTNhomMHTuChonMonHoc> nhomMHTuChonMonHocs = tblCTDTNhomMHTuChonMonHocService.findtblCTDTNhomMHTuChonMonHocByCondition(cons, 0, 0);
//       Long oldId = new Long(0);
//       
//       List<NhomMonHocTuChon> nhomMonHocTuChons = new ArrayList<NhomMonHocTuChon>();
//       
//       List<TblCTDTNhomMHTuChonMonHoc> monHocs = new ArrayList<TblCTDTNhomMHTuChonMonHoc>();
//       for(TblCTDTNhomMHTuChonMonHoc nhomTuChonMonHoc : nhomMHTuChonMonHocs){
//    	   if(!nhomTuChonMonHoc.getId().equals(oldId)){
//    		   //them vao CTDT
//    		   if(monHocs.size() > 0){
//    			   NhomMonHocTuChon nhomMonHocTuChon = new NhomMonHocTuChon();
//    			   nhomMonHocTuChon.setNhomTuChon(nhomTuChonMonHoc.getNhomMHTCId());
//    			   nhomMonHocTuChon.setMonHocTuChons(monHocs);
//    			   
//    			   nhomMonHocTuChons.add(nhomMonHocTuChon);
//    		   }
//    		   
//    		   //set lai oldId
//    		   oldId = nhomTuChonMonHoc.getId();
//    		   //set moi lai danh sach mon hoc
//    		   monHocs.clear();
//    		   monHocs.add(nhomTuChonMonHoc);
//    	   }else{
//    		   monHocs.add(nhomTuChonMonHoc);
//    		   
//    		   //neu la phan tu cuoi cung
//    		   if(nhomMHTuChonMonHocs.indexOf(nhomTuChonMonHoc) == nhomMHTuChonMonHocs.size() -1){
//    			   NhomMonHocTuChon nhomMonHocTuChon = new NhomMonHocTuChon();
//    			   nhomMonHocTuChon.setNhomTuChon(nhomTuChonMonHoc.getNhomMHTCId());
//    			   nhomMonHocTuChon.setMonHocTuChons(monHocs);
//    			   
//    			   nhomMonHocTuChons.add(nhomMonHocTuChon);
//    		   }
//    	   }
//       }
//       
//       ctdt.setNhomMonHocTuChons(nhomMonHocTuChons);
       session.put("CTDT", ctdt);

       
       
//       TblThongTinHocVienMonHocService tblThongTinHocVienMonHocService = (TblThongTinHocVienMonHocService) context
//				.getBean("tbl_ThongTin_HocVien_MonHocClient");

//       cons.clear();
//		{
//			ConditionReport con = new ConditionReport();
//			con.setCol("hocVienId.id");
//			con.setValue1(taiKhoanHocVien.get(0).getHocVienId().getId());
//			con.setOperator("eq");
//			cons.add(con);
//		}
//		List<TblThongTinHocVienMonHoc> ketquahoctaps = tblThongTinHocVienMonHocService
//				.findtblThongTinHocVienMonHocByCondition(cons, 0, 0);
//
//	    session.put("ketQuaHocTap", ketquahoctaps);

       
        return Action.SUCCESS;

     }
        catch(Exception e){
            System.out.println("Loi log in");
            e.printStackTrace();
            return Action.ERROR;
      }
       
}	
}
